The present Applicants and Assignees have developed a distributed object platform known proprietarily as Voyager. The following specification makes specific reference to Voyager. However, the examples and references described are not intended to be limited to the specific Voyager platform and nor its specific features and capabilities. The methods and examples to be described will have application to other platforms, and in particular to other distributed object systems.
A distributed application, such as Voyager and other distributed object/ORB systems, may, in some situations, create multiple connections between the same pair of application instances. These unshared connections unnecessarily consume network, memory, and processor resources. In particular, establishing a connection between application instances over a network requires significant time, time that is considered nonproductive overhead. For TCP connections the maximum time allowed for creating a physical connection is commonly set to 1 second or longer. Exchanging initial information, i.e., handshaking over a new connection to establish a higher level logical connection, e.g., to encrypt the connection or to verify the identity of each end of the connection, adds to the overhead.
One common solution to this problem is to pool (cache) connections at the physical level. When an application wishes to connect to a remote machine, it first checks the pool for an existing connection. If it finds one it uses that connection. The identity of the remote machine, used to search the pool, is the network address of the remote machine. However, using the network address as the identity of a computer fails to account for a state change at the remote computer, e.g., a restart of the application. Using the network address as the only identifier may also enable “man in the middle” attacks.
What is required is an improved system and method for providing connections between client and server applications.